#ifndef TOKEN
#error "You must define TOKEN macro before include this file"
#endif
//keywords
TOKEN(TK_FALSE,   "FALSE")
TOKEN(TK_TRUE,  "TRUE")
TOKEN(TK_AND,      "AND")
TOKEN(TK_ARRAY,    "ARRAY")
TOKEN(TK_ENUM,    "ENUM")
TOKEN(TK_POINTER,    "POINTER")
TOKEN(TK_BEGIN,  "BEGIN")
TOKEN(TK_CONST,   "CONST")
TOKEN(TK_DO,  "DO")
TOKEN(TK_ELSE,  "ELSE")
TOKEN(TK_END,     "END")
TOKEN(TK_FOR,     "FOR")
TOKEN(TK_FUNCTION,    "FUNCTION")
TOKEN(TK_GOTO,      "GOTO")
TOKEN(TK_IF,    "IF")
TOKEN(TK_LABEL,      "LABEL")
TOKEN(TK_OF,   "OF")
TOKEN(TK_PROCEDURE,      "PROCEDURE")
TOKEN(TK_PROGRAM,        "PROGRAM")
TOKEN(TK_RECORD,    "RECORD")
TOKEN(TK_REPEAT,    "REPEAT")
TOKEN(TK_READ,    "READ")
TOKEN(TK_THEN,    "THEN")
TOKEN(TK_TO,    "TO")
TOKEN(TK_TYPE,    "TYPE")
TOKEN(TK_UNTIL,    "UNTIL")
TOKEN(TK_UNION,    "UNION")
TOKEN(TK_VAR,    "VAR")
TOKEN(TK_VAL,    "VAL")
TOKEN(TK_VOID,    "VOID")
TOKEN(TK_WHILE,    "WHILE")
TOKEN(TK_WRITE,    "WRITE")
TOKEN(TK_INTEGER,     "INTEGER")
TOKEN(TK_REAL,    "REAL")
TOKEN(TK_CHAR,   "CHAR")
TOKEN(TK_STRING,   "STRING")
TOKEN(TK_BOOLEAN,   "BOOLEAN")
TOKEN(TK_DIV,           "DIV")
TOKEN(TK_MOD,           "MOD")
TOKEN(TK_NOT,           "NOT")
TOKEN(TK_OR,            "OR")
TOKEN(TK_CONTINUE,            "CONTINUE")
TOKEN(TK_BREAK,            "BREAK")
TOKEN(TK_XOR,        "XOR")
//identifier
TOKEN(TK_ID,        "ID")
//constant
TOKEN(TK_CONINTEGER,     "CONINTEGER")
TOKEN(TK_CONREAL,    "CONREAL")
TOKEN(TK_CONCHARS,   "CONCHARS")
TOKEN(TK_CONCHAR,   "CONCHAR")
//operators
TOKEN(TK_PO,           "^")
TOKEN(TK_DOT,           ".")
TOKEN(TK_LPAREN,        "(")
TOKEN(TK_RPAREN,        ")")
TOKEN(TK_LBRACKET,      "[")
TOKEN(TK_RBRACKET,      "]")
TOKEN(TK_COMMA,         ",")
TOKEN(TK_COLON,         ":")
TOKEN(TK_ASSIGN,        ":=")
TOKEN(TK_EQU,        "=")
TOKEN(TK_UNEQUAL,       "<>")
TOKEN(TK_GREAT,         ">")
TOKEN(TK_LESS,          "<")
TOKEN(TK_GREAT_EQ,      ">=")
TOKEN(TK_LESS_EQ,       "<=")
TOKEN(TK_ADD,           "+")
TOKEN(TK_SUB,           "-")
TOKEN(TK_MUL,           "*")
TOKEN(TK_REALDIV,           "/")
TOKEN(TK_SEMICOLON,     ";")
TOKEN(TK_ELLIPSE,       "..")
TOKEN(TK_FIELD,"FIELD")
TOKEN(TK_ENDFUNC,"ENDFUNC")
TOKEN(TK_ENDPROC,"ENDPROC")
TOKEN(TK_JUMP0,"JUMP0")
TOKEN(TK_JUMP1,"JUMP1")
TOKEN(TK_JUMP,"JUMP")
TOKEN(TK_CALL,"CALL")
TOKEN(TK_FORMCALL,"FORMCALL")
TOKEN(TK_FUNCPARAM,"FUNCPARAM")
TOKEN(TK_PROCPARAM,"PROCPARAM")
TOKEN(TK_ADDRPARAM,"ADDRPARAM")
TOKEN(TK_VALUEPARAM,"VALUEPARAM")
//TOKEN(TK_FUNCPARAM,"FUNCPARAM")
/*punctuators*/
TOKEN(TK_ZHUSHIU,        "/*")
TOKEN(TK_ZHUSHID,         "*/")
TOKEN(TK_LBRACE,        "{")
TOKEN(TK_RBRACE,        "}")

TOKEN(TK_POUND,         "#")
TOKEN(TK_NEWLINE,       "\n")
TOKEN(TK_YINHAO,       "\'")

